Nestjs入门

937次阅读
一条评论

共计 1150 个字符,预计需要花费 3 分钟才能阅读完成。

依赖注入几种方式。

封装为库

以pulsar的使用为例。特点:需要注入配置,创建client单例。

实现方式:在module中定义static register方法,返回DynamicModule。

static register(options: any): DynamicModule {
return {
// 封装的模块的名字,即当前模块的名字
module: PulsarModule,
imports: options.imports || [],
providers: [
{
// 可以在其它模块使用此字符串注入
provide: 'PULSAR_CLIENT_URL',
useFactory: options.useFactory,
inject: options.inject,
},
],
};
}

然后在对应service中提供client的方法:

import { Injectable, Inject } from '@nestjs/common';
import {
Client,
Consumer,
Producer,
ProducerOpts,
SubscribeOpts,
} from 'pulsar-client';
@Injectable()
export class PulsarService {
pulsar: Client;
constructor(@Inject('PULSAR_CLIENT_URL') private url) {
this.pulsar = new Client({ serviceUrl: url });
}
async buildConsumer(options: SubscribeOpts): Promise<Consumer> {
return this.pulsar.subscribe(options);
}
async buildProducer(options: ProducerOpts): Promise<Producer> {
return this.pulsar.createProducer(options);
}
async closeArr(arr: Consumer[] | Producer[]) {
if (!arr || !arr.length) return;
for (const ele of arr) ele.close();
}
async close(consumers?: Consumer[], producers?: Producer[]) {
this.closeArr(consumers);
this.closeArr(producers);
if (this.pulsar) {
this.pulsar.close();
}
}
}

关于pulsar,一个消息中间件,已经封装为一个npm库,欢迎使用,star。https://www.npmjs.com/package/nestjs-pulsar

正文完
 0
评论(一条评论)
2024-12-09 14:55:08 回复

Just adding my two cents, have you considered making this adjustment

     摩洛哥